/**
 * class
 * 公共，私有与受保护的修饰符
 * public 默认
 * private 私有属性，只能内部访问, 外部不能直接访问，但是可以借助其他方法，return出去访问
 * protected：受保护属性，自己可以，子类可以
 */

class Animal {
  name: string
  // 私有属性
  private gender: string

  protected address: string
  constructor(theName: string) {
    this.name = theName
    this.gender = '女生'
    this.address = '上海市奉贤区'
  }

  say() {
    return this.gender
  }

  move(distanceInMeters: number) {
    console.log(`${this.name} moved ${distanceInMeters}m.`)
  }
}

let response = new Animal('hello world')
// response.address
// 私有属性，只能内部访问,外部不能直接访问，但是可以借助其他方法，return出去访问
const res = response.say()
console.log(res, 'res')

class Dog extends Animal {
  constructor(props: string) {
    super(props)
  }
  showAddress() {
    console.log(this.address)
    return this.address
  }
}
let d = new Dog('1').showAddress()
console.log(d, 'd')
